package com.lazily.arrays_;


import java.util.Arrays;
import java.util.List;

/**
 * @Author:  GZQ
 * @date:  2025/3/24 21:48
 * @description: Arrays的其他方法
 * @verson: 1.0
 */

public class ArraysMethod02 {
	// 程序入口
	public static void main(String[] args) {
		Integer[] arr = {1, 2, 90, 132, 520};
		// binarySearch 通过二分搜素法进行查找, 要求必须排好
		// 解读
		// 1. 使用 binarySearch 二叉查找
		// 2. 要求该数组是有序的, 如果该数组是无序的, 不能使用binarySearch
		// 3. 如果数组中不存在该元素, 就返回 return -(low + 1);  // key not found.
		int index = Arrays.binarySearch(arr, 132);
		System.out.println("index=" + index);

		// copyOf 数组元素的复制
		// 解读
		// 1. 从 arr 数组中, 拷贝 arr.length个元素到 newArr 数组中
		// 2. 如果拷贝的长度 > arr.length 就在新数组的后面 增加 null
		// 3. 如果拷贝的长度 < 0 就抛出异常NegativeArraySizeException
		// 4. 该方法的底层使用的是 System.arraycopy()
		Integer[] newArr = Arrays.copyOf(arr, arr.length);
		System.out.println("====拷贝执行完毕后====");
		System.out.println(Arrays.toString(newArr));

		// fill 数组元素的填充
		Integer[] num = new Integer[]{1, 2, 90, 132, 520};
		// 解读
		// 1. 使用 99 去填充 num数组, 可以理解成是替换原来的元素
		Arrays.fill(num, 999);
		System.out.println("====num数组填充后====");
		System.out.println(Arrays.toString(num));


		// equals 比较两个数组元素是否完全一致
		// 解读
		// 1. 如果 arr 和 num 数组的元素一样, 就返回true
		// 2. 如果不是完全一样, 就返回false
		boolean flag = Arrays.equals(arr, num);
		System.out.println("flag=" + flag);

		// aslist 将一组值, 装换成list
		// 解读
		// 1. asList 方法， 会将 (2, 3, 4, 5)数据转成一个List集合
		// 2. 返回的 asList 编译类型 List(接口)
		// 3. asList 运行类型 java.util.Arrays$ArrayList, 是Arrays类的
		// 静态内部类  private static class ArrayList<E> extends AbstractList<E>
		//         implements RandomAccess, java.io.Serializable
		List asList = Arrays.asList(2,3,4,5);
		System.out.println("aslist=" + asList);
		System.out.println("asList的运行类型" + asList.getClass());
	}
}
